home *** CD-ROM | disk | FTP | other *** search
/ IRIX 6.2 Development Libraries / SGI IRIX 6.2 Development Libraries.iso / dist / complib.idb / usr / share / src / Complib / examples / fft1du_ex.c.z / fft1du_ex.c
C/C++ Source or Header  |  1996-03-14  |  4KB  |  112 lines

  1. /*
  2.  * fft1du_ex.c
  3.  *
  4.  *     This simple example illustrates the use of the C
  5.  *      interface to the complib FFT routines to calculate
  6.  *      a real-to-complex and complex-to-complex FFT.
  7.  *
  8.  *      This program reads the number of samples N for the sequence,
  9.  *      generates a real and complex sample input arrays, and calculates
  10.  *      the transform.
  11.  *
  12.  *
  13.  * Copyright 1995, Silicon Graphics, Inc.
  14.  * ALL RIGHTS RESERVED
  15.  *
  16.  * UNPUBLISHED -- Rights reserved under the copyright laws of the United
  17.  * States.   Use of a copyright notice is precautionary only and does not
  18.  * imply publication or disclosure.
  19.  *
  20.  * U.S. GOVERNMENT RESTRICTED RIGHTS LEGEND:
  21.  * Use, duplication or disclosure by the Government is subject to restrictions
  22.  * as set forth in FAR 52.227.19(c)(2) or subparagraph (c)(1)(ii) of the Rights
  23.  * in Technical Data and Computer Software clause at DFARS 252.227-7013 and/or
  24.  * in similar or successor clauses in the FAR, or the DOD or NASA FAR
  25.  * Supplement.  Contractor/manufacturer is Silicon Graphics, Inc.,
  26.  * 2011 N. Shoreline Blvd. Mountain View, CA 94039-7311.
  27.  *
  28.  * THE CONTENT OF THIS WORK CONTAINS CONFIDENTIAL AND PROPRIETARY
  29.  * INFORMATION OF SILICON GRAPHICS, INC. ANY DUPLICATION, MODIFICATION,
  30.  * DISTRIBUTION, OR DISCLOSURE IN ANY FORM, IN WHOLE, OR IN PART, IS STRICTLY
  31.  * PROHIBITED WITHOUT THE PRIOR EXPRESS WRITTEN PERMISSION OF SILICON
  32.  * GRAPHICS, INC.
  33.  *
  34.  *    To build executable:
  35.  *      % cc -o fft1du_ex fft1du_ex.c -lcomplib.sgimath -lm
  36.  *
  37.  *    To run executable:
  38.  *      % fft1du_ex 4
  39.  *      Printing " Input Real Array " of size 4 :
  40.  *         0.00   1.00   2.00   3.00
  41.  *      Printing " Input Complex Array " of size 8 :
  42.  *         0.00   0.00   1.00   0.00   2.00   0.00   3.00   0.00
  43.  *      Printing " FFT of Real Array " of size 6 :
  44.  *         6.00   0.00  -2.00   2.00  -2.00   0.00
  45.  *      Printing " FFT of Complex Array " of size 8 :
  46.  *         6.00   0.00  -2.00   2.00  -2.00   0.00  -2.00  -2.00
  47.  *
  48.  *      % fft1du_ex 5
  49.  *      Printing " Input Real Array " of size 5 :
  50.  *         0.00   1.00   2.00   3.00   4.00
  51.  *      Printing " Input Complex Array " of size 10 :
  52.  *         0.00   0.00   1.00   0.00   2.00   0.00   3.00   0.00   4.00   0.00
  53.  *      Printing " FFT of Real Array " of size 6 :
  54.  *        10.00   0.00  -2.50   3.44  -2.50   0.81
  55.  *      Printing " FFT of Complex Array " of size 10 :
  56.  *        10.00   0.00  -2.50   3.44  -2.50   0.81  -2.50  -0.81  -2.50  -3.44
  57.  *       
  58.  */
  59.  
  60. #include <stdio.h>
  61. #include <fft.h>
  62.  
  63. void print_array( int N, char string[], float array[]) {
  64.     printf( "Printing \" %s \" of size %d :\n", string, N);
  65.     for( ; N > 0 ; N--)
  66.         printf(" %6.2f", *array++);
  67.     printf("\n");
  68. }
  69.  
  70.  
  71. main( int argc, char *argv[]) {
  72.  
  73. #define SIZE 8
  74.     int i, N;
  75.     float       fArray[2*((SIZE+2)/2)], *fCoef;
  76.     complex     cArray[SIZE], *cCoef;
  77.  
  78. /*
  79.  *  The number of samples N.
  80.  */
  81.     N = atoi( argv[1]);
  82.  
  83. /*
  84.  *  Generate the real and complex sequences.
  85.  */
  86.     for ( i = 0 ; i < N ; i++) {
  87.         cArray[i].re = fArray[i]  = (float)i;
  88.         cArray[i].im = 0.0;
  89.     }
  90.  
  91. /*
  92.  *  Print out input data.
  93.  */
  94.     print_array( N,   "Input Real Array",             fArray);
  95.     print_array( 2*N, "Input Complex Array", (float *)cArray);
  96.  
  97. /*
  98.  *  Calculate the transforms.
  99.  */
  100.     fCoef = sfft1dui( N, NULL);
  101.     cCoef = cfft1di ( N, NULL);
  102.     scfft1du( -1, N, fArray, 1, fCoef);
  103.     cfft1d  ( -1, N, cArray, 1, cCoef);
  104.  
  105. /*
  106.  *  Print out transforms.
  107.  */
  108.     print_array( 2*((N+2)/2), "FFT of Real Array",             fArray);
  109.     print_array( 2*N,         "FFT of Complex Array", (float *)cArray);
  110.  
  111. }
  112.